package math.geom2d;

import math.base.Point2d;
import math.base.Vector2d;
import math.geomUtils.CurveType;

/**
 * @author Saga
 *
 */
public abstract class Curve2d {

    public abstract CurveType getCurveType();

    public abstract void reverse();

    public abstract Curve2d reversed();

    public abstract boolean isPeriodic();

    public abstract double getPeriod();

    public abstract double getFirstParameter();

    public abstract double getLastParameter();

    public abstract Point2d calcValue(double _param);

    public abstract Vector2d calcDerivative(double _param);

    public abstract Vector2d calcDerivativeN(double _param, int _order);

    public abstract void calcValueAndDerivative1(double _param, Point2d _pt, Vector2d _der1);

    public abstract void calcValueAndDerivative2(double _param, Point2d _pt, Vector2d _der1,
            Vector2d _der2);

    public abstract void calcValueAndDerivative3(double _param, Point2d _pt, Vector2d _der1,
            Vector2d _der2, Vector2d _der3);


//
//    public abstract boolean isClosed();
}
